<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
 * @property Doctrine $doctrine Biblioteca ORM
 * Controller para gerenciar logs de teste
 *
 */
class LogTeste extends AdminController {

    /**
     * Metodo para listar os cadastros
     *
     * @param int $offset Registro inicial
     */
    public function index( $page = 0 ) {
        $findBy = array();
        if( isNotBlank( $this->input->post( 'nome' ) ) ) {
            $findBy = array_merge( $findBy, array( 'nome' => $this->input->post( 'nome' ) ) );
        }
        $offset = 0;
        if( $page != 0 ) {
            $offset = getOffsetPaginacao( $page );
        }
        $lista = $this->doctrine->em->getRepository( 'LogsTestes' )->findBy(
                $findBy, 
                NULL, 
                LIMITE_PAGINACAO_ADMIN, 
                $offset
            );
        
        $total = count($lista);

        $this->assign( 'lista', $lista );
        $this->assign( 'total', $total );

        $this->display( 'logteste/index' );
    }

    /**
     * Exibe a tela de inserção/alteração
     *
     * @param int 
     */
    public function editar( $id = null ) {
        if( !empty( $id ) && $_SERVER['REQUEST_METHOD'] == 'GET' ) {
            $obj = $this->doctrine->em->getRepository( 'LogsTestes' )->find( $id );
            // colocamos os dados na variavel $_POST
            $_POST = (array) $obj;
        }
        $this->assign( 'casos_testes', $this->getCasosTestes() );
        $this->display( 'logteste/editar' );
    }

    /**
     * Insere um novo objeto ou altera um existente
     *
     * @param int
     */
    public function salvar( $id = null ) {
        $dao = new LogsTestes();
        // se está editando (informou o código)
        if( !empty( $id ) ) {
            // pegamos o registro do banco de dados
            $dao = $this->doctrine->em->getRepository( 'LogsTestes' )->find( $id );
        }
        populateForm( $dao, $this->input->post() );
        
        $this->doctrine->em->persist( $dao );
        $this->doctrine->em->flush();
        
        $this->saveOrUpdateCasosLogs( $dao->get_id_caso_teste(), $dao->get_id_log_teste() );

        redirect( 'admin/logteste/index' );
    }

    /**
     * Remove um aluno
     *
     * @param int 
     */
    public function remover( $id ) {
        if( !empty( $id ) ) {
            // removemos o objeto
            $dao = $this->doctrine->em->getRepository( 'LogsTestes' )->find( $id );
            if( $dao != null ) {
                $this->doctrine->em->remove( $dao );
                $this->doctrine->em->flush();
            }
        }
        redirect('admin/logteste/index');
    }
    
    /////////////////////////////////////////////////////////////////////
    
    private function getCasosTestes() {
        $sql = "SELECT
                        ct.id_caso_teste,
                        ct.nome
                FROM
                    casos_testes ct
                        inner join projetos p
                        on ct.id_projeto = p.id_projeto
                        inner join suites_testes st
                        on st.id_suite_teste = p.id_suite_teste
                ORDER BY	
                        ct.nome";
        $stmt = $this->doctrine->em->getConnection()->prepare($sql);
        $stmt->execute();
        return $stmt->fetchAll();
        
    }
    
    private function saveOrUpdateCasosLogs( $id_caso_teste, $id_log_teste ) {
        $sql = "SELECT * FROM casos_logs WHERE id_log_teste = $id_log_teste";
        $stmt = $this->doctrine->em->getConnection()->prepare( $sql );
        $stmt->execute();
        $caso_log = $stmt->fetchAll();
        if( isNotBlank( $caso_log ) && count( $caso_log ) > 0 ) {
            // alteração
            $sql = "UPDATE casos_logs SET id_caso_teste = $id_caso_teste WHERE id_log_teste = $id_log_teste";
        } else {
            // inserção
            $sql = "INSERT INTO casos_logs(id_caso_teste, id_log_teste) VALUES($id_caso_teste, $id_log_teste)";
        }
        $stmt = $this->doctrine->em->getConnection()->prepare( $sql );
        $stmt->execute();
    }
}
/* End of file logteste.php */
/* Location: ./application/controllers/admin/logteste.php */